package com.dospyer.jsql.enums;

import lombok.AllArgsConstructor;

/**
 * @author : peigen
 * Date: 2021/12/11 10:16 下午
 */
@AllArgsConstructor
public enum LockTypeEnum {
    RECORD_S(1 << 0, "S型行锁"),
    RECORD_X(1 << 1, "X型行锁"),
    GAP(1 << 2, "间隙锁"),
    NEXT_KEY(1 << 3, "临键锁"),
    INSERT_INTENTION(1 << 4, "插入意向锁");

    /**
     * 除了以上4种类型的锁以外，还有隐式锁。
     * 一般情况下 INSERT 操作是不会加锁的，通过 MVCC 快照读的情况下没有问题。
     * 但是当前读会出现脏读或脏写问题，所以需要通过隐式锁的方式来避免脏读和脏写。
     * <p>
     * 如果事务想对记录添加 S锁 或者 X锁 时，需要先看一下记录的 trx_id 是否是当前活跃的事务。
     * 如果不是直接加锁成功。
     * 如果是需要帮助当前事务创建一个 X锁（创建锁结构，is_waiting 是 false）， 然后自己创建锁结构，is_waiting 是 true，并且自己进入等待状态
     * <p>
     * 这样一个事务对新插入的记录可以不显示的加锁
     */

    private int typeMode;
    private String name;

}
